

import java.lang.reflect.Method;

//被代理的对象
interface Test{
    void say();
}

//handler
interface InvokeHandler{
    Object invoke(Object obj, Method method, Object ... arg);
}

public class JdkProxyDemo {
    public static void main(String[] args) {

    }
    //通过该方法获取接口的代理化对象，创建匿名内部类，实际上调用方法时会调用handler的invoke的方法
    public Test newProxyInstance(final InvokeHandler handler,final Class<?> clazz){
        return new Test() {
            @Override
            public void say() {
                try {
                    Method sayMethod = clazz.getMethod("say");
                    handler.invoke(this,sayMethod);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
    }

}
